In virtualized environments, it is becoming increasingly common for host systems that run virtual machines (VMs) to include one or more locally attached (i.e., “host-side”) flash storage devices. For example, one type of host-side flash storage device is a solid-state disk (SSD) or PCIe flash card that is installed within the chassis of a host system. Another type of host-side flash storage device is an external flash drive or appliance that is directly connected to a host system via a peripheral interface.
Generally speaking, host-side flash storage devices support significantly lower read/write latencies and higher bandwidth than backend storage arrays that a host system accesses over a network (e.g., Fibre channel, Ethernet, etc.). There are a number of reasons for this improved performance. First, backend storage arrays typically must service read/write requests from multiple host systems, and each backend storage array has finite queues that affect the amount of bandwidth/latency that the array can support for a particular host system. Second, storage networks may include active elements such as switches or routers that increase latencies between network endpoints (e.g., host systems and backend storage devices). Thus, host-side flash storage devices are better suited for caching/storing data that VMs running on the host system need to access frequently and rapidly. Unfortunately, existing virtualization platforms do not provide a mechanism for automatically allocating and surfacing (i.e., making accessible/visible) portions of a host-side flash storage device to VMs so that the VMs can take advantage of the device's low latency characteristics. Further, existing virtualization platforms cannot optimize allocations of surfaced flash storage capacity among VMs in response to changing conditions on the host system.